// 配置路由
import Vue from "vue";
// 导入
import VueRouter from "vue-router";
import Home from "@/views/Home";
import Login from "@/views/Login";
import Register from "@/views/Register";
import Search from "@/views/Search";
// 把VueRouter原型对象的push，先保存一份
let originPush = VueRouter.prototype.push
let originReplace = VueRouter.prototype.replace

// 重写push|replace
// 第一个参数：告诉原来的push方法，你往哪里跳（传递哪些参数）
// 第二个参数：成功的回调
// 第三个参数：失败的回调
 // call||apply的区别：
// 相同点，都可以调用函数一次，都可以篡改函数的上下文一次
// 不同点call与apply传递参数：call传递参数用逗号隔开，apply方法执行，传递数组
VueRouter.prototype.push = function(location,resolve,reject){
    if(resolve && reject){
        originPush.call(this,location,resolve,reject)
    }else{
        originPush.call(this,location,()=>{},()=>{})
    }
}

VueRouter.prototype.replace = function(location,resolve,reject){
    if(resolve && reject){
        originReplace.call(this,location,resolve,reject)
    }else{
        originReplace.call(this,location,()=>{},()=>{})
    }
}

// 使用插件
Vue.use(VueRouter);
// 配置路由
const routes = [
  //  重定向 在项目跑起来的时候，访问 让它立马定位到首页
  {
    path: "/",
    redirect: "/home",
    meta: { show: true },
  },

  {
    path: "/home",
    component: Home,
    meta: { show: true },
  },
  {
    path: "/login",
    component: Login,
    //根据原型判定是否显示底部信息
    meta: { show: false },
  },
  {
    path: "/register",
    component: Register,
    meta: { show: false },
  },
  {
    path: "/search/:keyWord?", //加上？表示了params参数可传可不传
    component: Search,
    meta: { show: true },
    name: "search",
    // 路由组件能不能传递props数据？
    // 布尔值写法 params
    // props:true,
    // 对象写法:额外的给路由组件传递一些props
    // props:{a:1,b:2}
    // 函数写法，可以把params参数、query参数，通过props传递给路由组件
    props: ($route) => {
      return { keyWord: $route.params.keyWord, k: $route.query.k };
    },
  },

  // {
  //   path: '/about',
  //   name: 'about',
  //   // route level code-splitting
  //   // this generates a separate chunk (about.[hash].js) for this route
  //   // which is lazy-loaded when the route is visited.
  //   component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
  // }
];
const router = new VueRouter({
  mode: "history",
  base: process.env.BASE_URL,
  routes,
});
// 导出
export default router;
